ZooKeeper :集群管理工具

更新时间:2024-09-21 13:09

ZooKeeper,是一个集群管理工具,提供配置维护、域名服务、分布式同步和组服务等。ZooKeeper有单机模式和集群模式两种安装模式。

ZooKeeper的各个服务节点组成一个集群(如果有2n+1个节点,则允许n个节点失效)。ZooKeeper集群中有两个角色:一个是Leader,主要负责写服务和数据同步;另一个是Follower,提供读服务。当Leader失效后,Follower将在所有Follower中重新选举出新的Leader。

ZooKeeper主要用于实现分布式系统中Master选举、分布式协调、集群管理、负载均衡、分布式锁等功能。在HBase集群中,ZooKeeper服务器为其提供稳定可靠的协作服务管理。

软件简介

ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此要想弄懂ZooKeeper首先得对Fast Paxos有所了解。

ZooKeeper的基本运转流程:选举Leader、同步数据、选举Leader过程中算法有很多,但要达到的选举标准是一致的、Leader要具有最高的执行ID,类似root权限、集群中大多数的机器得到响应并接受选出的Leader。

HBase内置有ZooKeeper,也可以使用外部ZooKeeper。让HBase使用一个已有的不被HBase托管的Zookeep集群,需要设置 conf/hbase env sh文件中的HBASE_MANAGES_ZK 属性为 false。

接下来指明Zookeeper的host和端口。可以在 hbase-site.XML中设置, 也可以在HBase的CLASSPATH下面加一个zoo.cfg配置文件HBase 会优先加载 zoo.cfg 里面的配置,把hbase-site.xml里面的覆盖掉。

当HBase托管ZooKeeper的时候,Zookeeper集群的启动是HBase启动脚本的一部分,但客户需要自己去运行。

客户可以用这条命令启动ZooKeeper而不启动HBase. HBASE_MANAGES_ZK 的值是 false,如果客户想在HBase重启的时候不重启ZooKeeper,客户可以这样做。对于独立Zoopkeeper的问题,客户可以在 Zookeeper启动得到帮助。

软件特点

在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里,Zookeeper使用Watcher察觉事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数据。

Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。那么Zookeeper能做什么事情呢,简单的例子:假设ZooKeeper有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。

索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。

参考资料

HBase 官方文档中文版.瀚海星空.2024-04-01

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: